package com.hspedu.single_;

public class SingleTon01 {
    public static void main(String[] args) {
        /*GirlFriend xh = new GirlFriend("小红");
        GirlFriend xb = new GirlFriend("小白");*/
        GirlFriend instance = GirlFriend.getInstance();
        System.out.println(instance);
        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance);

        System.out.println(instance == instance2);//T
        System.out.println("n1="+ GirlFriend.n1);
    }
}

//有一个类，GirFriend
//一个人，只能有一个女朋友
class GirlFriend{
    public static int n1 = 100;
    private String name;
    //为了能够在静态方法中，返回gf对象，需要将其修饰为static，
    //只要加载了这个对象，就会创建对象
    //使用单利设计模式，一般都是重量级对象，饿汉式可能是创建了对象，但没有使用，造成资源的浪费
    //这是饿汉式的弊端
    private static GirlFriend gf= new GirlFriend("小红红");

    //如何保证我们只能创建一个 GirlFriend 对象
    //步骤[单例模式-饿汉式]
    //1.将构造器私有化
    //2.在类的内部直接创建对象，(该对象是static)
    //3.提供一个公共的static方法，返回gf对象
    private GirlFriend(String name) {
        System.out.println("构造器被调用~~");
        this.name = name;
    }

    public static GirlFriend getInstance(){
        return gf;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}

